//
// Created by luo on 2022-09-19.
//

#ifndef LEARNINGCPLUSOPENCV_CPP_H
#define LEARNINGCPLUSOPENCV_CPP_H

#include <stdio.h>
#include <stdlib.h> //c语言标准库函数头文件,随机数头文件
#include <stdbool.h>
#include <iostream>//最常用的头文件-用处：数据流输入／输出：cin，cout的头文件
#include <algorithm>//算法类函数:sort().....的头文件
#include <cmath>//各个数学函数：max()，min()，sqrt()....的头文件
#include<string>//字符串操作的头文件
#include<windows.h>//windows操作的头文件，如：Sleep(),system()
//结构类：vector,map,list,queue,stack的头文件：
#include <list>
#include <map>
#include <queue>
#include <vector>
#include <stack>
#define LEN sizeof(struct Student__)
struct Student__
{
    long num;
    float score;
    struct Student__ *next; //next是指针变量，指向结构体变量
};


#ifdef LEARNINGCPLUSOPENCV_CPP_H
extern "C"{
#endif
    //定义节点数据类型
    struct LinkNode_
    {
        int data;
        struct LinkNode_ *next;
    };
    //初始化链表
    struct LinkNode_ *Init_LinkList();
    struct Student__ *create(void);
    //在值为oldval后面插入一个新的数据newval
    void InsertByValue_LinkList(struct LinkNode_ *header,int oldval,int newval);
    //删除值为val的结点
    void RemoveByValue_Linkist(struct LinkNode_ *header,int delValue);
    //遍历链表
    void Foreach_LinkList(struct LinkNode_ *header);
    //销毁链表
    void Destroy_LinkList(struct LinkNode_ *header);
    //清空链表
    void Clear_LinkList(struct LinkNode_ *header);


};

using namespace  std;
class CppDemo
{
public:
    void struct_demo();
    void union_demo();
    void enum_demo();
    void typedef_demo();
    void pointer_demo();
    void linklist_demo();
    void document_demo();

    //函数模板
    void test_template_func01();         //函数模板语法
    void test_template_func02();         //函数模板注意事项
    void test_template_func03();         //函数模板案例
    void test_template_func04();         //普通函数与函数模板的区别
    void test_template_func05();         //普通函数与函数模板的调用规则
    void test_template_func06();         //模板的局限性

    //类模板
    void test_template_class07();         //类模板语法
    void test_template_class08();         //类模板与函数模板区别
    void test_template_class09();         //类模板中成员函数创建时机
    void test_template_class10();         //类模板对象做函数参数
    void test_template_class11();         //类模板与继承
    void test_template_class12();         //类模板成员函数类外实现
    void test_template_class13();         //类模板分文件编写
    void test_template_class14();         //类模板与友元
    void test_template_class15();         //类模板案例

private:
    //cv::Mat src,img;
};

class Stl_container
{
public:
    //vector容器算法迭代器 初识
    void test_first_01();                //vector存放内置数据类型
    void test_first_02();               //Vector存放自定义数据类型
    void test_first_03();                //Vector容器嵌套容器

    //string容器
    void test_string_01();                //string构造函数
    void test_string_02();                //string赋值操作
    void test_string_03();                //string字符串拼接
    void test_string_04();                //string查找和替换
    void test_string_05();                //string字符串比较
    void test_string_06();                //string字符存取
    void test_string_07();                //string插入和删除
    void test_string_08();                //string子串

    //vector容器
    void test_vector_01();                //vector构造函数
    void test_vector_02();                //vector赋值操作
    void test_vector_03();                //vector容量和大小
    void test_vector_04();                //vector插入和删除
    void test_vector_05();                //vector数据存取
    void test_vector_06();                //vector互换容器
    void test_vector_07();                //vector预留空间

    //deque容器

    //queue容器

    //list容器

private:

};

#endif //LEARNINGCPLUSOPENCV_CPP_H
